if语句
let i = 10;
if (i > 25) {
console.log("Greater than 25.");
} else if (i < 0) {
console.log("Less than 0.");
} else {
console.log("Between 0 and 25, inclusive.");
}
do-while语句
let i = 0;
do {
i += 2;
} while (i < 10);
while语句
let i = 0;
while (i < 10) {
i += 2;
}
for语句
let count = 10;
for (let i = 0; i < count; i++) {
console.log(i);
}
初始化、条件表达式和循环后表达式都不是必须的
// 无限循环
for (;;) {
doSomething();
}
// 只包含条件表达式,for循环变成了while循环
let count = 10;
let i = 0;
for (; i < count; ) {
console.log(i);
i++;
}
for-in语句
用于枚举对象中的非符号键属性
for (const propName in window) {
document.write(propName);
}
控制语句中的 const 不是必需的,但为了确保这个局部变量不被修改,推荐使用 const。如果 for-in 循环要迭代的变量是 null 或 undefined,则不执行循环体。
for-of语句
用于遍历可迭代对象的元素
for (const el of [2,4,6,8]) {
document.write(el);
}
控制语句中的 const 不是必需的,但为了确保这个局部变量不被修改,推荐使用 const。for-of 循环会按照可迭代对象的 next()方法产生值的顺序迭代元素。如果尝试迭代的变量不支持迭代,则 for-of 语句会抛出错误。
标签语句
start: for (let i = 0; i < count; i++) {
console.log(i);
}
在这个例子中,start 是一个标签,可以在后面通过 break 或 continue 语句引用,多数用于跳出特定循环
break 和 continue 语句
break语句用于立即退出循环,执行循环后的下一条语句
let num = 0;
for (let i = 1; i < 10; i++) {
if (i % 5 == 0) {
break;
}
num++;
}
console.log(num); // 4
continue语句用于立即退出本次循环,再次判断条件以执行下次循环语句
let num = 0;
for (let i = 1; i < 10; i++) {
if (i % 5 == 0) {
continue;
}
num++;
}
console.log(num); // 8
break 和 continue 都可以与标签语句一起使用,返回代码中特定的位置
let num = 0;
outermost:
for (let i = 0; i < 10; i++) {
for (let j = 0; j < 10; j++) {
if (i == 5 && j == 5) {
break outermost;
}
num++;
}
}
console.log(num); // 55
以上代码使用 continue 也有类似效果,使用 continue 跳出循环时,最终 num 的值为95
with语句(供了解,不推荐使用)
将代码作用域设置为特定的对象,使用该语句的主要场景是针对一个对象反复操作,这时候将代码作用域设置为该对象能提供便利
let qs = location.search.substring(1);
let hostName = location.hostname;
let url = location.href;
// 上面代码中的每一行都用到了 location 对象
// 使用 with 语句,可以简化一些代码
with(location) {
let qs = search.substring(1);
let hostName = hostname;
let url = href;
}
这里,with 语句用于连接 location 对象。这意味着在这个语句内部,每个变量首先会被认为是一个局部变量。如果没有找到该局部变量,则会搜索 location 对象,看它是否有一个同名的属性。如果有,则该变量会被求值为 location 对象的属性
switch语句
let i = 35;
switch (i) {
case 25:
console.log("25");
break; // break关键字用于跳出switch语句,如果没有break,则代码会继续匹配下一个条件
case 35:
console.log("35");
break;
case 45:
console.log("45");
break;
default:
console.log("Other");
}
最好给每个条件后面都加上 break 语句,如果确实需要连续匹配几个条件,那么推荐写个注释表明是故意忽略了break
与其他语言相比,JS的 switch 语句有一些特性:
switch 语句在比较每个条件的值时会使用全等操作符
可以用于所有数据类型(在一些语言中,只能用于数值)
条件的值不需要是常量,也可以是变量或表达式:
switch ("hello world") {
case "hello" + " world":
console.log("Greeting was found.");
break;
case "goodbye":
console.log("Closing was found.");
break;
default:
console.log("Unexpected message was found.");
}
// 控制台输出"Greeting was found."
类似的可以在判断中加入更多逻辑:
let num = 25;
switch (true) {
case num < 0:
console.log("Less than 0.");
break;
case num >= 0 && num <= 10:
console.log("Between 0 and 10.");
break;
case num > 10 && num <= 20:
console.log("Between 10 and 20.");
break;
default:
console.log("More than 20.");
}
使用 function 关键字声明,后跟一组参数,然后是函数体。可以通过函数名来调用函数,要传给函数的参数放在括号里(如果有多个参数,则用逗号隔开)
function sayHi(name, message) {
console.log("Hello " + name + ", " + message);
}
sayHi("Nicholas", "how are you today?");
// 控制台输出 Hello Nicholas, how are you today?
任何函数在任何时间都可以使用 return 语句来返回函数的值
function sum(num1, num2) {
return num1 + num2;
console.log("Hello world"); // 不会执行
}
const result = sum(5, 10); // 15
一个函数可以有多个 return 语句
function diff(num1, num2) {
if (num1 < num2) {
return num2 - num1;
} else {
return num1 - num2;
}
}
return 语句可以不带返回值,用于提前终止函数执行
function sayHi(name, message) {
return;
console.log("Hello " + name + ", " + message); // 不会执行
}